Преобразование кода из Java в Go - PullRequest
3 голосов
/ 30 ноября 2011

Я не знаю синтаксис Go.Может ли кто-нибудь помочь мне преобразовать следующий код Java в языке Go Google.

import java.io.*;

class FileWrite 
{
  public static void main(String args[])
  {
    try {
      // Create file 
      FileWriter fstream = new FileWriter("out.txt");
      BufferedWriter out = new BufferedWriter(fstream);
      out.write("Hello Java");
      // Close the output stream
      out.close();
    } catch (Exception e){ //Catch exception if any
      System.err.println("Error: " + e.getMessage());
    }
  }
}

Этот код Java создает файл с именем out.txt и записать строку (Hello Java) в файл.

Ответы [ 3 ]

3 голосов
/ 30 ноября 2011

Например,

package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
)

func main() {
    f, err := os.Create("out.txt")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer f.Close()
    wtr := bufio.NewWriter(f)
    abc := 1
    _, err = wtr.WriteString("Hello Go " + strconv.Itoa(abc) + " ok\n")
    if err != nil {
        fmt.Println(err)
        return
    }
    err = wtr.Flush()
    if err != nil {
        fmt.Println(err)
        return
    }
}

file out.txt:
Hello Go 1 ok\n

Строковые литералы

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

Необработанные строковые литералы - это символьные последовательности между обратными кавычками ``.В кавычках любой символ допустим, кроме обратной кавычки.Значение необработанного строкового литерала - это строка, состоящая из неинтерпретированных символов между кавычками;в частности, обратная косая черта не имеет специального значения, и строка может занимать несколько строк.

Интерпретируемые строковые литералы - это последовательности символов между двойными кавычками "".Текст между кавычками, который может не занимать несколько строк, формирует значение литерала, причем экранирование с обратной косой чертой интерпретируется так же, как в символьных литералах (за исключением того, что \ 'недопустимо, а \ "допустимо). Восьмеричное число из трех цифр (Экранирование \ nnn) и двузначный шестнадцатеричный (\ xnn) представляют отдельные байты результирующей строки, все другие экранирования представляют (возможно, многобайтовую) кодировку UTF-8 отдельных символов. Таким образом, внутри строкового литерала \ 377 и \ xFFпредставляют один байт со значением 0xFF = 255, а ÿ, \ u00FF, \ U000000FF и \ xc3 \ xbf представляют два байта 0xc3 0xbf кодировки UTF-8 символа U + 00FF.

3 голосов
/ 01 декабря 2011

Но как эта проблема может быть решена? play.golang.org / p / 169zmQvK7m - Alessandro

Например,

package main

import (
    "fmt"
    "os"
    "strconv"
)

func routine(fd *os.File) {
    abc := 1
    fd.WriteString("Hello Go " + strconv.Itoa(abc) + " ok\n")
    fd.WriteString("\nHello Gopher!\n")
}

func main() {
    fd, err := os.Create("out.txt")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer fd.Close()
    abc := 1
    fd.WriteString("Hello Go " + strconv.Itoa(abc) + " ok\n")
    fd.WriteString("\nHello Gopher!\n")
    routine(fd)
}
3 голосов
/ 30 ноября 2011
package main

import (
    "fmt"
    "os"
)

func main() {
    fd, err := os.Create("out.txt")
    if err != nil {
        fmt.Println(os.Stderr, err)
        return
    }
    // defer calls a function at the end of the current function.           
    defer fd.Close()

    fd.WriteString("Hello Gopher!\n")
}

Надеюсь, это поможет.Если это не ясно, пожалуйста, укажите, какая часть нуждается в объяснении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...