Выход:

ался выяснить, как реализовать то, что я первоначально думал, было бы простой программой. У меня есть текстовый файл с цитатами, разделенными символом «$»

Я хочу, чтобы программа анализировала файл цитат и случайным образом выбирала 3 кавычки для отображения и стандартного вывода.

В файле 1022 цитаты.

Когда я пытаюсь разбить файл, я получаю эту ошибку: отсутствует '

Я не могу понять, как назначить $ со строковым литералом, я продолжаю получать:
отсутствует '

Это пользовательский сканер:

onDollarSign := func(data []byte, atEOF bool) (advance int, token []byte, err error) {  
    for i := 0; i < len(data); i++ { 
        //if data[i] == "$" {              # this is what I did originally
        //if data[i:i+2] == "$" {    # (mismatched types []byte and string)
        //if data[i:i+2] == `$` {    # throws (mismatched types []byte and string)
        // below throws syntax error: unexpected $ AND missing '
        if data[1:i+2] == '$' {   
            return i + 1, data[:i], nil  
        }  
    }  

Строковый литерал работает нормально, если я использую только один$.

По какой-то причинетолько 71 цитата загружены в секцию цитат. Я не уверен, как расширить. Разрешить хранить все 1022 цитаты в памяти.

Мне было очень трудно понять, как это сделать. вот что у меня сейчас

package main
import (  
    "bufio"  
    "fmt"  
    "log"  
    "math/rand"  
    "os"  
    "time"  
)  

func main() {  
    rand.Seed(time.Now().UnixNano()) // Try changing this number!  
    quote_file, err := os.Open("/Users/bryan/Dropbox/quotes_file.txt")  
    if err != nil {  
        log.Fatal(err)  
    }  
    scanner := bufio.NewScanner(quote_file)  
    // define split function  
    onDollarSign := func(data []byte, atEOF bool) (advance int, token []byte, err error) {  
        for i := 0; i < len(data); i++ {  
            if data[i] == '$' {  
                return i + 1, data[:i], nil  
            }  
        }  
        fmt.Print(data)  
        return 0, data, bufio.ErrFinalToken  
    }  
    scanner.Split(onDollarSign)  
    var quotes []string  

    // I think this will scan the file and append all the parsed quotes into quotes  
    for scanner.Scan() {  
        quotes = append(quotes, scanner.Text())  

    }  
    if err := scanner.Err(); err != nil {  
        fmt.Fprintln(os.Stderr, "reading input:", err)  
    }  
    fmt.Print(len(quotes))  
    fmt.Println("quote 1:", quotes[rand.Intn(len(quotes))])  
    fmt.Println("quote 2:", quotes[rand.Intn(len(quotes))])  
    fmt.Println("quote 3:", quotes[rand.Intn(len(quotes))])  
}  

Ответы на вопрос(1)

Ваш ответ на вопрос