[Go] 입력 범위가 매우 넓다. 한 시기가 지난 후에 1204300;, 한 시기가 지났다. 한 시기가 지났고 1204100;; 시간이 지났다.transformTransformer 설치

5601 단어 Gogolangtech
며칠 전에 이쪽 기사를 봤는데 "재밌었어!"이런 느낌.
https://zenn.dev/ikanag0/articles/3af1882762a5cf
트위터에는 "그저께 저녁 1203901204309, 어제 저녁 1204100, 오후 120424200,매번 이런 문자를 볼 때마다 모두들 어떻게 타자를 칩니까?신경 쓰여서 그래요. 이런 도구와 사이트를 이용하네요.
위의 기사에서 CLI가 발표되었습니다.더 널리 사용되는 도구를 만들어 보고 싶어 고transform.Transformer 설치에 착안했다.다음은 상세하게 설명할 것이다.

transform.Transformer?


Go의 특징 중 하나는 io.Reader/io.Writer를 통해 입력과 출력을 추상화하고 유동화하는 것이다.이러한 인터페이스를 활용함으로써 광범위한 입력과 출력을 효율적으로 처리할 수 있다.
효과적인 활용의 예 중 하나로 ShiftJIS 인코딩을 통한 파일 읽기 등이 있다.다음 글에는 Go가 UTF-8에서 문자열을 처리하기 때문에 ShiftJIS로 인코딩된 코드를 읽으려면 transform.NewReader(io.Reader, japanese.ShiftJIS.NewDecoder()) 제작io.Reader을 통해 원하는 흐름 처리에 연결할 수 있다는 설명도 있다.
https://zenn.dev/mattn/articles/fd545a14b0ffdf transform.NewReader의 두 번째 매개 변수는 transform.Transformer 인터페이스이고 다음과 같은 방법을 가진 구조체라면 원시적인 전환 처리를 실현할 수 있다.
type Transformer interface {
	Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error)
	Reset()
}
https://pkg.go.dev/golang.org/x/[email protected]/transform#Transformer Transform 함수는 간에서 src에서 읽은 바이트열을 원하는 변환으로 쓴다dst.입력한 src을 몇 번으로 나눈다고 가정하면 멀티바이트 문자를 쓸 때는 문자의 중도분할을 고려해야 하고, 쓰고 싶은 바이트열dst의 길이가 부족할 때는 나머지 부분을 보존해야 하는 등 상당히 어려운 아이다.하지만 이를 통해 각종 입력과 출력 사이에 문자열 변환을 넣을 수 있다는 것이 큰 매력 아닌가.
따라서 유니코드가 표현할 수 있는 범위 내에서 글씨체transform.Transformer를 바꾸어 보려고 한다.

이번 실상.


제작된 포장은 다음과 같습니다.
https://github.com/tenkoh/go-textstyle a-z,A-Z,0-9의 문자는 원하는 글씨체로 변환됩니다.이 문자들은 1바이트 문자이기 때문에 그 부분transform.Transformer만 간단하게 실현할 수 있다.
현재 상황은 아래의 글씨체에 대응하고 있다.
  • Bold
  • Italic
  • BoldItalic
  • Script
  • BoldScript
  • Fraktur
  • BoldFraktur
  • DoubleStruck
  • SansSerif
  • SansSerifBold
  • SansSerifItalic
  • SansSerifBoldItalic
  • Monospce
  • 예를 들어 문자열을 표준 출력으로 변환하려면 다음과 같은 방법을 사용하십시오.
    package main
    
    import (
    	"io"
    	"os"
    	"strings"
    
    	"github.com/tenkoh/go-textstyle"
    	"golang.org/x/text/transform"
    )
    
    func main() {
    	s := "Hello, Gophers"
    	r := transform.NewReader(strings.NewReader(s), textstyle.Bold())
    	io.Copy(os.Stdout, r)
    	//Output: 𝐇𝐞𝐥𝐥𝐨, 𝐆𝐨𝐩𝐡𝐞𝐫𝐬
    }
    
    여기 사용 이외에 각종 입력과 출력을 선택할 수 있습니다.예를 들어 출력 목적지는 http이다.리퀘스트를 하면서 트위터 API를 깨물면 원하는 글꼴로 변환해 트위터에 기고하는 앱을 쉽게 구축할 수 있다.
    상기 코드에서 기본적으로 코드점의 편이만 제공하면 변환을 할 수 있고 간단한 처리를 채택했다.각종 글꼴의 편이량을 계산해 코드에 베끼는 것이 번거롭기 때문에 go generate를 통해 코드를 생성하려고 시도한다.각양각색의 경험을 하여 많은 것을 배웠다.

    끝말


    모두 함께 기나긴 세월을 즐겁게 보냈다...하자!유쾌한 활용 사례가 있다면 꼭 댓글로 알려주세요.나는 매우 기쁘다.

    좋은 웹페이지 즐겨찾기