[Go] 입력 범위가 매우 넓다. 한 시기가 지난 후에 1204300;, 한 시기가 지났다. 한 시기가 지났고 1204100;; 시간이 지났다.transformTransformer 설치
트위터에는 "그저께 저녁 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
을 통해 원하는 흐름 처리에 연결할 수 있다는 설명도 있다.transform.NewReader
의 두 번째 매개 변수는 transform.Transformer
인터페이스이고 다음과 같은 방법을 가진 구조체라면 원시적인 전환 처리를 실현할 수 있다.type Transformer interface {
Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error)
Reset()
}
Transform
함수는 간에서 src
에서 읽은 바이트열을 원하는 변환으로 쓴다dst
.입력한 src
을 몇 번으로 나눈다고 가정하면 멀티바이트 문자를 쓸 때는 문자의 중도분할을 고려해야 하고, 쓰고 싶은 바이트열dst
의 길이가 부족할 때는 나머지 부분을 보존해야 하는 등 상당히 어려운 아이다.하지만 이를 통해 각종 입력과 출력 사이에 문자열 변환을 넣을 수 있다는 것이 큰 매력 아닌가.따라서 유니코드가 표현할 수 있는 범위 내에서 글씨체
transform.Transformer
를 바꾸어 보려고 한다.이번 실상.
제작된 포장은 다음과 같습니다.
a-z
,A-Z
,0-9
의 문자는 원하는 글씨체로 변환됩니다.이 문자들은 1바이트 문자이기 때문에 그 부분transform.Transformer
만 간단하게 실현할 수 있다.현재 상황은 아래의 글씨체에 대응하고 있다.
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
를 통해 코드를 생성하려고 시도한다.각양각색의 경험을 하여 많은 것을 배웠다.끝말
모두 함께 기나긴 세월을 즐겁게 보냈다...하자!유쾌한 활용 사례가 있다면 꼭 댓글로 알려주세요.나는 매우 기쁘다.
Reference
이 문제에 관하여([Go] 입력 범위가 매우 넓다. 한 시기가 지난 후에 1204300;, 한 시기가 지났다. 한 시기가 지났고 1204100;; 시간이 지났다.transformTransformer 설치), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/foxtail88/articles/1bbb3108db0b21텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)